package org.lisy.java.collection;

import java.util.ArrayList;
import java.util.Iterator;

public class ArrayListOperate {

	/**
	 * List：元素是有序的，元素可以重复，因为该集合体系有索引
	 * List有三个子类对象：
	 * 	ArrayList：底层的数据结构使用的是数组结构，特点：查询速度很快，但是增删稍慢。线程不同步，扩容1.5倍
	 * 	LinkedList：底层使用的链表数据结构，特点：增删的速度很快，查询的速度慢
	 * 	Vector：底层是数组数据结构，线程同步。速度慢，被ArrayList替代了
	 *  SynchronizedList：底层是数组数据结构，使用同步代码块包裹了 ArrayList 的方法
	 *   - SynchronizedList 有很好的扩展和兼容功能。他可以将所有的 List 的子类转成线程安全的类
	 *   - SynchronizedList 中实现的类并没有都使用 synchronized 同步代码块。其中有 listIterator 和 listIterator(int index)并没有做同步处理
	 *   - 所以使用 SynchronizedList 进行遍历的时候要手动加锁
	 */
	public static void main(String[] args) {
		/**
		 * List
		 */
		ArrayList<String> list = new ArrayList<String>();
		// 添加元素
		list.add("java 0");
		list.add("java 1");
		list.add("java 2");

		sop("collection: " + list);

		// 获取集合的长度
        sop("length: " + list.size());
        
		// 在指定位置添加元素
		list.add(1, "java 3");
		sop("add:  " + list);

		// 删除指定位置的元素
		list.remove(2);
		sop("delete: " + list);

		// 修改元素
		list.set(2, "java 4");
		sop("update: " + list);

		// 通过角标获取元素
		sop("select: " + list.get(1));

		sop("all");
		// 获取所有元素
		for (int i = 0; i < list.size(); i++) {
			sop("index" + i + " = " + list.get(i));
		}

		sop("iterator");
		// 通过迭代器
		Iterator<String> it = list.iterator();
		while (it.hasNext()) {
			sop("next:" + it.next());
		}

	}

	public static void sop(Object obj) {
		System.out.println(obj);
	}
}
